﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 自定义缓存
{
    //普通缓存
    public class DictionaryCache
    {
        private static Dictionary<Type, string> _cache = null;

        //静态构造行数， 同一个类的静态构造行数在整个进程中执行切只执行一次
        static DictionaryCache()
        {
            Console.WriteLine("执行静态构造函数");
            _cache = new();
        }

        public static string GetCache<T>()
        {
            Type type = typeof(T);
            if (!_cache.ContainsKey(type))
            {
                _cache[type] = $"{typeof(T).FullName}_{DateTime.Now.ToString()}";
            }
            return _cache[type];
        }
    }

    //泛型缓存

    public class GenericCache<T>
    {
        private static string _str;

        //同一个类的静态构造函数在整个进程中执行且只执行一次
        //泛型类其实本质上给一个类生成不同的副本
        //因此，泛型类的不同类型参数生成的不同的副本，会分别执行静态构造函数
        static GenericCache()
        {
            _str = DateTime.Now.ToString();
        }

        public static string GetCache()
        {
            return _str;
        }
    }
}